let
    考勤数据表 = (入职日期 as nullable datetime, 离职时间 as nullable datetime, 当月的日期 as date, 放假日期表 as table) =>
        let
            当月日期仅日期 = Date.From(当月的日期),
            // 获取当月的第一天和最后一天
            月份第一天 = Date.StartOfMonth(当月日期仅日期),
            月份最后一天 = Date.EndOfMonth(当月日期仅日期),
            // 将所有日期时间转换为日期
            入职日期仅日期 = if 入职日期 <> null then Date.AddDays(Date.From(入职日期), 2) else 月份第一天,
            离职时间仅日期 = if 入职日期 = 离职时间 then 入职日期仅日期 else if 离职时间 <> null then Date.From(离职时间) else null,
            // 确定考勤开始和结束日期
            考勤开始日期 = if 入职日期仅日期 = null then 月份第一天 else if 入职日期仅日期 > 月份最后一天 then
                null
            else if 入职日期仅日期 > 月份第一天 then
                入职日期仅日期
            else
                月份第一天,
            考勤结束日期 =
                if 离职时间 = null then
                    月份最后一天
                else if 离职时间仅日期 < 月份第一天 then
                    null
                else if 离职时间仅日期 <= 月份最后一天 then
                    离职时间仅日期
                else
                    月份最后一天,
            // 生成考勤日期列表
            考勤日期列表 =
                if 考勤开始日期 <> null and 考勤结束日期 <> null then
                    List.Dates(考勤开始日期, Duration.Days(考勤结束日期 - 考勤开始日期) + 1, #duration(1, 0, 0, 0))
                else
                    {},
            // 排除放假日期
            非放假日期列表 = List.RemoveItems(考勤日期列表, 放假日期表[放假日期]),
            // 创建考勤数据表
            考勤数据 = Table.FromList(非放假日期列表, Splitter.SplitByNothing(), {"考勤日期"})
        in
            考勤数据
in
    考勤数据表
